//
//  容器.swift
//  SwiftTips-Mid
//
//  Created by wangxi on 2016/11/10.
//  Copyright © 2016年 wangxi. All rights reserved.
//

import Foundation

struct MyContainer: ActionRunnable {
    static func run() {
        
        // 把不相关的类型放到同一个容器中
        // Any 类型可以隐式转换
//        let mixed: [Any] = [1, "two", 3]
        
        // 转换为 [NSObject]
//        let objectArray = [1 as NSObject, "two" as NSObject, 3 as NSObject]
        
        
// -----
        
//        let mixed: [CustomStringConvertible] = [1, "two", 3]
//        
//        for objc in mixed {
//            print(objc.description)
//        }
        
// *********************
        let mixed = [IntOrString.IntValue(1),
                     IntOrString.StringValue("two"),
                     IntOrString.IntValue(3)]
        
        for value in mixed {
            switch value {
            case .IntValue(let i):
                print(i * 2)
            case let .StringValue(s):
                print(s.capitalized)
            }
        }
    }
}

// 在存储时，利用 enum 可以带有值的特点，将类型信息封装到特定的 enum 中
enum IntOrString {
    case IntValue(Int)
    case StringValue(String)
}

